package com.interview.three;

import java.io.IOException;

/*
* 类加载是懒惰的，首次用到时才会加载（下面的初始化条件满足也会导致类加载）
*   1-使用了类.class
*   2-用类加载器的loadClass方法加载类
* 类初始化时懒惰的，满足的条件有
*   1-main方法所在类
*   2-首次访问静态方法或者静态变量（非final
*   3-子类初始化，导致父类初始化
*   4-Class.forName
*   5-new ,clone,反序列化
* 
* 
* */
public class TestClassLoader {
    private  Class<?> studentClass;
    public static void main(String[] args) throws IOException {
        System.out.println("未用到 Student");
        System.in.read();

        System.out.println(Student.class); // 关键代码1：会触发类加载
        System.out.println("已加载 Student");
        // 演示类对象的查找技巧
        TestClassLoader loader = new TestClassLoader();
        loader.studentClass = loader.getClass();
        System.in.read();

        Student stu = new Student(); // 关键代码2：会触发类初始化
        System.out.println("已初始化 Student");
        System.in.read();
        System.out.println("---------End----------");
    }
}

